昨天我們提到了 AFKDO 語言裡定義的八大種類 Lookup,不過,實務上並不一定會用到這些規則,主要還是第 1、4、6 類規則。在接下來的幾天,我們會透過一些例子來解釋如何使用它們。
白話來說就是一換一,把一個字符換成另一個字符是 OpenType 裡面最常見的替換方式。在 AFKDO 裡,主要有三種寫法:
substitute <glyph> by <glyph>; # format A
substitute <glyphclass> by <glyphclass>; # format B
其中,substitute
標記可以簡寫為 sub
,也請不要忘記在最後面加上分號。
舉例來說,我們想設計一套可以使用 smcp 特性的字型,所以在基本型之外,我們還額外設計了 A.sc
- Z.sc
的小寫轉小型大寫字母,這裡的 sc
指的是 small caps
,透過 .
串接,可以讓我們更清楚知道 A.sc
是 A
的子集。
我們可以使用 format A 的格式來窮舉一組 smcp 特性:
feature smcp {
substitute a by A.sc;
substitute b by B.sc;
substitute c by C.sc;
... 中略 D ~ Y
substitute z by Z.sc;
} smcp;
直譯而言,就是在啟用 smcp 特性時,將小寫的 a
到 z
轉成 A.sc
到 Z.sc
。
或是透過昨天介紹的範圍列舉 [ <start> - <end> ]
的 format B,簡單的寫成:
feature smcp {
substitute [a - z] by [A.sc - Z.sc];
} smcp;
或是額外設定兩組 class,這樣的好處是在其他地方可以重複調用 @Lowers
和 @SmallCaps
:
@Lowers = [a - z];
@SmallCaps = [A.sc - Z.sc];
feature smcp {
substitute @Lowers by @SmallCaps;
} smcp;
三者的表達方式都是等價的。
有興趣的可以類推前幾天提到的 smcp, c2cp, swsh, salt, ss##,其實都是額外設計一格字符,再把原本的轉成我們指定要的。
白話來說就是一換多,不過對我們熟悉的文字來說都蠻少會用的,基礎語法為:
substitute <glyph> by <glyph sequence>;
以 liga 來說,假設我們想讓使用者反向解開設定好的連字,便可以使用:
substitute f_f_i by f f i;
或是把 &
這個符號,還原成原本的 Et
:
substitute ampersand to E t;
其實也是...蠻少用的,通常用於 trad feature 這種,可以讓使用者在輸入簡體字或日文新字型後,從多個字符裡面手動選擇繁體字或是舊字型。
基礎語法為:
substitute <glyph> from <glyphclass>;